import axios from 'axios';
import { ElMessage } from 'element-plus';

// 创建axios实例
const http = axios.create({
  baseURL: process.env.NODE_ENV === 'production' ? '' : '',
  timeout: 120000, // 增加到120秒，确保大模型有足够时间生成习题
  headers: {
    'Content-Type': 'application/json',
  }
});

// 请求拦截器 - 用于调试和处理请求
http.interceptors.request.use(
  config => {
    console.log('HTTP请求:', config.method.toUpperCase(), config.url);
    // 添加时间戳防止缓存
    if (config.method === 'get') {
      config.params = {
        ...config.params,
        _t: Date.now()
      };
    }
    
    // 从localStorage获取token并添加到请求头
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    
    return config;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器 - 用于调试和统一处理响应
http.interceptors.response.use(
  response => {
    console.log('HTTP响应:', response.status, response.config.url);
    return response;
  },
  error => {
    // 处理错误
    if (error.response) {
      // 服务器响应了，但状态码不在2xx范围
      console.error('错误响应:', error.response.status, error.response.config.url);
      console.error('错误响应数据:', error.response.data);
      
      const statusText = {
        400: '请求参数错误',
        401: '未授权，请重新登录',
        403: '拒绝访问',
        404: '请求的资源不存在',
        500: '服务器内部错误',
        502: '网关错误',
        503: '服务不可用',
        504: '网关超时',
      };
      
      const errorMsg = error.response.data?.message || statusText[error.response.status] || `请求失败(${error.response.status})`;
      ElMessage.error(errorMsg);
      
      // 如果是401认证失败，清除token并重定向到登录页
      if (error.response.status === 401) {
        localStorage.removeItem('token');
        localStorage.removeItem('teacherId');
        window.location.href = '/login';
      }
    } else if (error.request) {
      // 请求已发送但没有收到响应
      console.error('网络错误, 未收到响应:', error.message);
      console.error('请求配置:', error.config);
      
      if (error.code === 'ECONNABORTED') {
        ElMessage.error('请求超时，大模型处理较慢，请稍后重试或减少题目数量');
      } else {
        ElMessage.error('网络连接失败，请检查您的网络连接或服务器状态');
      }
    } else {
      // 发送请求时出错
      console.error('请求配置错误:', error.message);
      ElMessage.error('请求发送失败: ' + error.message);
    }
    
    return Promise.reject(error);
  }
);

export default http; 